/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package parser;

import java.io.File;
import java.util.Iterator;
import java.util.LinkedList;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

/**
 * Classe che esegue il parsing del documento in formato XML.
 * Viene estratto il contenuto del file presente all'interno dei tag "text",
 * "title" e "dateline".
 * @author Giorgio Ghisalberti
 */
public class Xml {
    
	private static Xml instance;
	
	SAXBuilder builder = new SAXBuilder();
    Document doc = null;
    Element root = null;   
    
    public static  Xml getInstance() { if (instance == null) instance = new Xml() ; return instance; }
        
    /**
     * Costruttore della classe
     */
    private Xml(){
        
    } 
    
    /**
     * Metodo che gestice il parsing del file XML. Viene reperito il testo
     * contenuto all'interno dei tag definiti dal parametro in ingresso
     * @param field : nome del tag di interesse
     * @return la stringa di testo reperita
     */
    public String parseFile(String filePath) {
    	File file = new File(filePath);
    	try{
	    	doc = builder.build(file);
	        root = doc.getRootElement();   	
    	}catch(Exception e){e.printStackTrace();}
        String result = "";               
        result = getContent(root, "");       
        return result;
    } 
    
    /**
    * Viene reperito il testo contenuto nel file XML, all'interno del campo "body" (o "text"),
     "title", oppure "dateline
    * @param current
    * @param depth
    * @param content
    * @return
    */
    public String getContent(Element current, String content) {
       
    	LinkedList<Element> children = new LinkedList<Element>(current.getChildren());
        Iterator<Element> iterator = children.iterator(); 
        
        while (iterator.hasNext()) {
            Element child = iterator.next();
            String text = child.getText();
            content = content + text + " ";
            content = getContent(child,content);
        }

        return content;
    }
    
    

}
